package com.itheima.consumer.feign;


import com.itheima.consumer.config.FeignConfiguration;
import com.itheima.consumer.feign.fallback.UserFeignClientImpl;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.Map;
import java.util.Random;

/**
 * 声明当前接口时feign客户端
 *
 * feign： debug级别
 */
@FeignClient(value = "user-service",
        fallback = UserFeignClientImpl.class,
        configuration = FeignConfiguration.class
)
// 启动类中 开启feign相当于开启 @FeignClient注解扫描功能
// Feign会使用JDK的动态代理技术，帮助我们创建一个代理对象 注入到springIOC容器中
// JDK  接口    CGLIB  必须能够被继承
public interface UserFeignClient {
    /**
     * 声明方法  指定要调用对应微服务的哪个方法
     *
     * 当我们调用接口方法时，实际上是代理对象方法被调用
     *
     * 代理对象会根据你的注解配置 生成调用路径:
     * @FeignClient(value = "user-service")
     *  @GetMapping("/user/{id}")
     *  GET   http://user-service/user/itcast
     *
     *  feign 集成了 Ribbon
     *
     *  Ribbon会根据负载均衡规则进行指定的调用
     */
    @GetMapping("/user/{id}")
    public Map queryById(@PathVariable("id") String username);
    @PostMapping("/user")
    public String save(@RequestBody Map user);
    @DeleteMapping("/user/{id}")
    public String delete(@PathVariable("id") String username);
}
